//#include <stdio.h>
//
//int main() 
//{
//    int t;
//    scanf_s("%d", &t);
//
//    while (t--)
//    {
//        long long x, y;
//        scanf_s("%lld %lld", &x, &y);
//
//        long long d = x ^ y; 
//        long long lowbit = d & -d; 
//
//        printf("%lld\n", lowbit);
//    }
//
//    return 0;
//}

//
//#include <stdio.h>
//
//int main() 
//{
//    int T;
//    scanf_s("%d", &T);  
//
//    while (T--) {
//        int n, q;
//        scanf_s("%d %d", &n, &q); 
//        unsigned long long F = 0;
//        // 读取序列元素并同时计算
//        for (int i = 0; i < n; i++) 
//        {
//            unsigned long long a_i;
//            scanf_s("%llu", &a_i);
//            if (i == 0)
//            {
//                F = a_i;
//            }
//            else 
//            {
//                F = (F & a_i) << 1; 
//            }
//        }
//
//        int l, r;
//        for (int i = 0; i < q; i++) 
//        {
//            scanf_s("%d %d", &l, &r);
//        }
//
//        printf("%llu\n", F);
//    }
//
//    return 0;
//}

#include <stdio.h>

const long long MOD = 1000000007;

long long pow_mod(long long base, long long exp, long long mod) 
{
    long long result = 1;
    base %= mod;
    while (exp > 0) 
    {
        if (exp & 1) 
        {
            result = (result * base) % mod;
        }
        base = (base * base) % mod;
        exp >>= 1;
    }
    return result;
}

int main()
{
    int k;
    scanf_s("%d", &k);

    if (k == 0) 
    {

        printf("0\n");
        return 0;
    }

    long long pow_2k = pow_mod(2, 2 * k, 3 * MOD);
    long long numerator = (pow_2k - 1 + 3 * MOD) % (3 * MOD);
    long long ans = numerator / 3 % MOD;

    printf("%lld\n", ans);

    return 0;
}